package com.hzqy.service.itf;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hzqy.commons.utils.XpYunUtil;
import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class XpYunServiceBean{

	protected final Logger LOG = LoggerFactory.getLogger(getClass());


	public Map<String, Object> addPrinters() {
		Map<String, Object> resultMap = new HashMap<>();

		JSONObject params = new JSONObject();
		params.put("user", XpYunUtil.USER);
		params.put("timestamp", String.valueOf(System.currentTimeMillis()));
		params.put("sign", DigestUtils.sha1Hex(XpYunUtil.USER + XpYunUtil.USER_KEY + params.get("timestamp")));
		params.put("debug", "0");

		JSONArray items = new JSONArray();
		JSONObject item = new JSONObject();
		item.put("sn", XpYunUtil.SN);
		item.put("name", "康德测试打印机");
		items.add(item);

		params.put("items", items);

		String param = JSONObject.toJSONString(params);
		String api_url = "https://open.xpyun.net/api/openapi/xprinter/addPrinters";
		LOG.debug("芯烨云API (addPrinters) url: " + api_url);
		LOG.debug("芯烨云API (addPrinters) params: " + param);
		long t1 = System.currentTimeMillis();
		Map<String, String> requestMap = XpYunUtil.post(api_url, param);
		LOG.debug("芯烨云API (addPrinters) 请求结果: " + requestMap + " 耗时: " + (System.currentTimeMillis() - t1) + "ms.");

		resultMap.put("requestMap", requestMap);
		if ("1".equals(requestMap.get("success"))) {
			JSONObject resultJson = JSONObject.parseObject(requestMap.get("msg"));
			if ("0".equals(resultJson.getInteger("code"))) {
				resultMap.put("success", 1);
				resultMap.put("msg", "接口调用成功!");
			} else {
				resultMap.put("success", -2);
				resultMap.put("msg", "接口返回code有误！ msg: " + resultJson.getString("msg"));
			}
		} else {
			resultMap.put("success", -1);
			resultMap.put("msg", "接口请求状态码有误！ msg: " + requestMap.get("msg"));
		}

		return resultMap;
	}

	public Map<String, Object> setVoiceType(int voiceType) {
		Map<String, Object> resultMap = new HashMap<>();

		JSONObject params = new JSONObject();
		params.put("user", XpYunUtil.USER);
		params.put("timestamp", String.valueOf(System.currentTimeMillis()));
		params.put("sign", DigestUtils.sha1Hex(XpYunUtil.USER + XpYunUtil.USER_KEY + params.get("timestamp")));
		params.put("debug", "0");

		params.put("sn", XpYunUtil.SN);
		params.put("voiceType", voiceType);// 声音类型： 0真人语音（大） 1真人语音（中） 2真人语音（小） 3 嘀嘀声 4 静音


		String param = JSONObject.toJSONString(params);
		String api_url = "https://open.xpyun.net/api/openapi/xprinter/setVoiceType";
		LOG.debug("芯烨云API (setVoiceType) url: " + api_url);
		LOG.debug("芯烨云API (setVoiceType) params: " + param);
		long t1 = System.currentTimeMillis();
		Map<String, String> requestMap = XpYunUtil.post(api_url, param);
		LOG.debug("芯烨云API (setVoiceType) 请求结果: " + requestMap + " 耗时: " + (System.currentTimeMillis() - t1) + "ms.");

		resultMap.put("requestMap", requestMap);
		if ("1".equals(requestMap.get("success"))) {
			JSONObject resultJson = JSONObject.parseObject(requestMap.get("msg"));
			if ("0".equals(resultJson.getString("code"))) {
				resultMap.put("success", 1);
				resultMap.put("msg", "接口调用成功!");
			} else {
				resultMap.put("success", -2);
				resultMap.put("msg", "接口返回code有误！ msg: " + resultJson.getString("msg"));
			}
		} else {
			resultMap.put("success", -1);
			resultMap.put("msg", "接口请求状态码有误！ msg: " + requestMap.get("msg"));
		}

		return resultMap;
	}


	public Map<String, Object> print(String content) {
		Map<String, Object> resultMap = new HashMap<>();

		JSONObject params = new JSONObject();
		params.put("user", XpYunUtil.USER);
		params.put("timestamp", String.valueOf(System.currentTimeMillis()));
		params.put("sign", DigestUtils.sha1Hex(XpYunUtil.USER + XpYunUtil.USER_KEY + params.get("timestamp")));
		params.put("debug", "0");

		params.put("sn", XpYunUtil.SN);
		params.put("copies", 1);
		params.put("mode", 1);

		params.put("content", content);

		String param = JSONObject.toJSONString(params);
		String api_url = "https://open.xpyun.net/api/openapi/xprinter/print";
		LOG.debug("芯烨云API (print) url: " + api_url);
		LOG.debug("芯烨云API (print) params: " + param);
		long t1 = System.currentTimeMillis();
		Map<String, String> requestMap = XpYunUtil.post(api_url, param);
		LOG.debug("芯烨云API (print) 请求结果: " + requestMap + " 耗时: " + (System.currentTimeMillis() - t1) + "ms.");

		resultMap.put("requestMap", requestMap);
		if ("1".equals(requestMap.get("success"))) {
			JSONObject resultJson = JSONObject.parseObject(requestMap.get("msg"));
			if ("0".equals(resultJson.getInteger("code"))) {
				resultMap.put("success", 1);
				resultMap.put("msg", "接口调用成功!");
			} else {
				resultMap.put("success", -2);
				resultMap.put("msg", "接口返回code有误！ msg: " + resultJson.getString("msg"));
			}
		} else {
			resultMap.put("success", -1);
			resultMap.put("msg", "接口请求状态码有误！ msg: " + requestMap.get("msg"));
		}

		return resultMap;
	}

	public Map<String, Object> playVoice() {
		Map<String, Object> resultMap = new HashMap<>();

		JSONObject params = new JSONObject();
		params.put("user", XpYunUtil.USER);
		params.put("timestamp", String.valueOf(System.currentTimeMillis()));
		params.put("sign", DigestUtils.sha1Hex(XpYunUtil.USER + XpYunUtil.USER_KEY + params.get("timestamp")));
		params.put("debug", "0");

		params.put("sn", XpYunUtil.SN);
		params.put("payType", 41);// 	支付方式：
		// 取值范围41~55：
		// 支付宝 41、微信 42、云支付 43、银联刷卡 44、银联支付 45、会员卡消费 46、会员卡充值 47、翼支付 48、成功收款 49、嘉联支付 50、壹钱包 51、京东支付 52、快钱支付 53、威支付 54、享钱支付 55

		params.put("payMode", 60);// 	支付与否：
		// 取值范围59~61：
		// 退款 59 到账 60 消费 61。
		params.put("money", 11);// 	支付金额：
		// 最多允许保留2位小数。

		String param = JSONObject.toJSONString(params);
		String api_url = "https://open.xpyun.net/api/openapi/xprinter/playVoice";
		LOG.debug("芯烨云API (playVoice) url: " + api_url);
		LOG.debug("芯烨云API (playVoice) params: " + param);
		long t1 = System.currentTimeMillis();
		Map<String, String> requestMap = XpYunUtil.post(api_url, param);
		LOG.debug("芯烨云API (playVoice) 请求结果: " + requestMap + " 耗时: " + (System.currentTimeMillis() - t1) + "ms.");

		resultMap.put("requestMap", requestMap);
		if ("1".equals(requestMap.get("success"))) {
			JSONObject resultJson = JSONObject.parseObject(requestMap.get("msg"));
			if ("0".equals(resultJson.getInteger("code"))) {
				resultMap.put("success", 1);
				resultMap.put("msg", "接口调用成功!");
			} else {
				resultMap.put("success", -2);
				resultMap.put("msg", "接口返回code有误！ msg: " + resultJson.getString("msg"));
			}
		} else {
			resultMap.put("success", -1);
			resultMap.put("msg", "接口请求状态码有误！ msg: " + requestMap.get("msg"));
		}

		return resultMap;
	}


    public static void main(String[] args) {
        //new XpYunServiceBean().addPrinters();
		//new XpYunServiceBean().setVoiceType(4);
		//new XpYunServiceBean().playVoice();



		// <BR>：换行符（同一行有闭合标签(如 </C>)则应放到闭合标签前面, 连续两个换行符<BR><BR>可以表示加一空行）
		// <L></L>：左对齐
//		<C></C>：居中对齐
//		<R></R>：右对齐
//		<N></N>：字体正常大小
//		<HB></HB>：字体变高一倍
//		<WB></WB>：字体变宽一倍
//		<B></B>：字体放大一倍
//		<CB></CB>：字体放大一倍居中
//		<HB2></HB2>：字体变高二倍
//		<WB2></WB2>：字体变宽二倍
//		<B2></B2>：字体放大二倍
//		<BOLD></BOLD>：字体加粗
//		<LOGO></LOGO>：LOGO图片（标签内容是图片Base64格式字符串, 暂未开放）
//		<QR></QR>：二维码（标签内容是二维码值, 最大不能超过256个字符, 单个订单最多只能打印一个二维码）。
//		二维码宽度设置：可以通过 <QR> 标签名称自定义，如 <QR180> 表示宽度为180，不指定默认为132，
//		最小值为80，最大值为185
//		<BARCODE></BARCODE>：条形码（标签内容是条形码值）

		String printContent = "" +
				// "<LOGO>" + XpYunUtil.ImageToBase64ByLocal("D:\\IdeaProjects\\gd_hqjc_web\\src\\main\\webapp\\PIC\\model\\commons\\hotel_02\\imgs\\info\\back_focus.png").replaceAll("\\r\\n", "") + "</LOGO>\r\n" +
				"<HB><C> **#3 百度 **</C></HB>\r\n" +
				"................................\r\n" +
				"<B><C>----货到付款----</C></B>\r\n" +
				"<BOLD><C>XPYUN SDK 打印测试</C></BOLD>\r\n" +
				"下单时间：2017年08月07日23时10分\r\n" +
				"订单编号：15021186372518\r\n" +
				"*************商品***************\r<C>---1号口袋---</C><HB> \n" +
				"同步菜 x1 10.00\r\n" +
				"Dan x1 7.80\r\n" +
				"</HB>\n" +
				"................................\r\n" +
				"配送费：5.00\r\n" +
				"餐盒费：4.00\r\n" +
				"********************************<HB>\n" +
				"订单总价：￥26.80\r\n" +
				"棕榈南岸 4栋3单元404号\r\n" +
				"牟（先生）：186-9830-9092\r\n" +
				"订单备注：[用餐人数]1人；\r\n" +
				"</HB><B><C> ** 完 **</C></B>\r\n" +
				"<BARCODE>98As765?'@#89</BARCODE>\r\n" +
				"<C><QR>http://www.baidu.com</QR></C>\r\n" +
				"</HB><B><C> ** 完 **</C></B>\r\n" +
				"\r\n" +
				"\r\n"
				;

		// printContent = "<LOGO><LC>GyoAPwAAAAAAAAAAAAAAAAABAQMHDgwZGBgwMBAAIDYGBAyMjASEBgMDAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGyoAPwAAAAAAAAAAAAEAAAyc2PBgxYcCAkKDAQAAAABAcHB4cHIDB/7///9/f38fH8//Xx8fDw8PRyEAAAAAAAAAAAAKGyoAPwAIDA8PREjAgAAAAQEHj8cAAAEBAULCwAAAAQcAAAEHAzj8/z+f/////////////////////P4AAAAHD///fx8KGyoAPwAAAADMREZicmLy//35+f3//z8/Pjw4YIAAhAgINPjzxv///vbkwc/98///+vz48ODQ/OAAAQ8DH38///////8KGyoAPwAAAAAAAAAAAAAA8PDg4ODAwMAIAAAgQICgIECAAIAMOGDAAAAQwIBggPgAAABg8HBAQEDAwMDD/vz+/PDAwIAKGyoAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK</LOGO>" + printContent;




		new XpYunServiceBean().print(printContent);
		//Map<String, Object> map = new HashMap<>();
		//map.put("sss", XpYunUtil.ImageToBase64ByLocal("D:\\IdeaProjects\\gd_hqjc_web\\src\\main\\webapp\\PIC\\model\\commons\\hotel_02\\imgs\\info\\back_focus.png").replaceAll("\\r\\n", ""));
		//System.out.println(JSONObject.toJSONString(map));

		// System.out.println(XpYunUtil.ImageToBase64ByLocal("D:\\IdeaProjects\\gd_hqjc_web\\src\\main\\webapp\\PIC\\model\\commons\\hotel_02\\imgs\\info\\back_focus.png"));
    }


}
